1 module hip.hipaudio.backend.avaudio.source; 2 3 version(iOS): 4 import avaudiosourcenode; 5 import avaudioplayernode; 6 import avaudiosinknode; 7 import avaudioionode; 8 import hip.hipaudio.backend.avaudio.clip; 9 import hip.error.handler; 10 import hip.hipaudio.backend.avaudio.player; 11 import hip.hipaudio.audiosource; 12 13 class HipAVAudioSource : HipAudioSource 14 { 15 AVAudioSinkNode sink; 16 AVAudioPlayerNode player; 17 AVAudioPCMBuffer buffer; 18 19 protected bool isClipDirty = true; 20 21 22 this(HipAVAudioPlayer player) 23 { 24 this.player = player.playerNode; 25 } 26 alias clip = HipAudioSource.clip; 27 28 29 override IHipAudioClip clip(IHipAudioClip newClip) 30 { 31 if(newClip != clip) 32 isClipDirty = true; 33 super.clip(newClip); 34 return newClip; 35 } 36 37 alias loop = HipAudioSource.loop; 38 override bool loop(bool value) 39 { 40 bool ret = super.loop(value); 41 return ret; 42 } 43 44 45 46 override bool play() 47 { 48 import hip.hipaudio.backend.audioclipbase; 49 if(isPlaying) 50 { 51 } 52 AVAudioPCMBuffer b = getBufferFromAPI(clip).avaudio; 53 player.scheduleBuffer(b); 54 player.play(); 55 return true; 56 } 57 override bool stop() 58 { 59 player.stop(); 60 isPlaying = false; 61 return false; 62 } 63 override bool pause() 64 { 65 player.pause(); 66 isPaused = true; 67 return false; 68 } 69 override bool play_streamed() => false; 70 71 72 ~this() 73 { 74 75 } 76 }